如何测试人工智能软件?
这两天围棋人机大战——阿法狗(阿尔法狗,AlphaGo)和李世石(暂时俗称:小李子)之战吸引了不少眼球,测试人员也不例外,之前就看到一篇文章,测试人员将李世石称为“谷歌(Google)高级软件测试工程师”。但也看到另外一篇文章,其观点是:李世石是一个好用户,但不是一个合格的测试工程师。然后列举了一个合格的测试工程师应该做哪些异常操作、异常输入等等,还给大家普及了测试知识。实际上,这篇文章差矣!作者可能不理解人工智能(Artificial Intelligent,AI)软件,或者说,不知道如何对AI软件、甚至像搜索引擎、图像识别软件、语音识别软件、游戏软件等有效的测试方法。如果到这时候,还要做这样的测试,如何和世界围棋冠军比赛?而且是向全世界直播的。
作为AI软件的一个实例——阿法狗,小李子是最合格的测试工程师。如果阿法狗赢了小李子(实际到目前是完胜3:0),说明这款软件是极其成功的,满足谷歌(Google)公司的期望,完成了其高质量的检验。如果阿法狗输了,说明还有改进的空间,质量有待提高,测试也发挥了作用,但也不能说明这款软件质量不合格,只是没有达到一流水平,因为之前得到过相对较低水平的检验:即和欧洲冠军的比赛,阿法狗5:0完胜人类专业棋手。
所以,对于AI软件的测试,实际有一个时间维度,AI软件随着时间(不断学习)前移,其能力必须(快速)增强,和人类一样,能够不断成长,这才是一款真正的AI软件。这里以阿法狗为例,如下图所示,阿法狗的确做到了。
AI软件最初的测试,就是看它有没有学习能力,本质上,就是算法的验证,即对启发式算法(heuristic algorithm)、启发式搜索算法(heuristic searchalgorithm)、元搜索算法(Meta-heuristicalgorithm)、强化学习和深度强化学习或具体的算法(如遗传算法、模拟退火算法、神经网络、深度神经网络、禁忌搜索、演化算法、蚁群算法)等中某些算法或算法的组合进行验证。算法的验证,主要是通过实验进行(虽然也可以通过数学、模型等演化进行证明),借助大量数据进行普适性验证。例如,比较有名的图像识别算法验证,就借助ImageNet提供的大量图片进行验证。
说起这个,还有一个故事:
2015年5月份,百度宣称其在ImageNet测试中取得了全球最好结果,其图像识别错误率仅为4.58%,而微软是4.94%,谷歌为4.8%。在这种测试中,人类辨识ImageNet照片的错误率为5%左右。 可是,周二,ImageNet的计算机科学家发表声明指出,百度在测试中存在违规行为,百度采用了密集测试的方法以提高成绩。按照规定,ImageNet只允许参与者每周向测试服务器提交2次测试结果。可是在3月份的5天时间内,百度却提交了40次结果。ImageNet表示,百度还使用了30个不同的账号,在过去6个月中提交了约200次测试结果。 在ImageNet测试中,人工智能需要扫描拥有100多万张图片的数据库,然后将它们分为1000个不同类别。大多数研究人员通常使用数据库中的部分图片,对软件进行图像识别测试。而通过密集测试,百度工程师可以通过调整他们的软件熟悉这些图片的信息,从而获得优势。 …… 百度拒绝回答相关问题,但在ImageNet网站发表声明称,百度科学家吴韧已经为他所谓的“失误”道歉。 (来源:http://tech.qq.com/a/20150604/006269.htm ) |
AI软件的测试,更多的是靠“试验”进行验证,这和“Test”倒是更吻合,Test本质上就是“样本性的试验验证活动”。AI软件的测试还依赖大数据,基于大数据自动产生、分析、呈现等技术,更有效地验证AI软件的合理性。
比赛是对AI软件的测试的最有效手段之一,虽然代价比较大。除了时间维度(纵向)外,还可以从其它维度进行测试或验证,如横向——同时和不同能力的人类棋手进行比赛,人类棋手水平越低,阿法狗花时越少;或者做让子测试,人类棋手水平越低,阿法狗能够让子越多。
也可以对“算法深度”这个维度进行测试,算法深度越深,阿法狗的能力越强(虽然会更耗时),而且阿法狗能够根据剩余时间调整算法深度。昨天比赛,不少专家就期望:小李子能再坚持一下,让阿法狗耗时用完,进入读秒阶段,情形又会怎样?阿法狗会不会算不过来,走出各种败招?
这里只是讨论了AI软件不同于传统软件的某些测试特点。当然,某些传统的测试方法也会在AI软件测试中用到,如在代码级的单元测试就没什么区别,一些性能测试、可伸缩性测试、安全性测试也是要进行的。
当然,AI软件测试没那么容易,这里只是通俗易懂地解释如何对AI软件进行测试。实际工作中,AI软件的前期测试还是很困难的。例如,为了测试Numenta(工作模式更接近人的大脑的AI软件),IBM资深研究员Winfried Wilcke带领着一百人的团队来测试它的算法。如果我们面对俄罗斯的控制机器人集群的智能软件包Unicum,又如何测试呢?它可是说是“机器人之上的机器人”,可以独立分配集群内部的机器人角色、确定集群中的核心、替换脱离的单位,还会自动占据有利位置,搜寻目标,并在自动模式下向操纵员申请作战与摧毁目标的许可。
未来需要进一步了解AI软件,进一步提升数学能力,更好理解各种启发式搜索算法、并行算法、分布式架构等技术,才能有更好的对策和方法应对AI软件的测试挑战。
(如果其它公众号想转发本文,请邮件联系作者:Kerryzhu at vip.163.com 得到许可,否则谢绝转发 )